package com.atguigu.lease.common.exception;

import com.atguigu.lease.common.result.ResultCodeEnum;
import lombok.Data;

/**
 * @Author GQS @Date 2024/8/30/8:29 @Description
 */
/**
 * 自定义异常类，用于处理策略执行中发生的异常情况。
 * 继承自RuntimeException，用于声明一个非检查型异常。
 */
@Data
public class StgyException extends RuntimeException {
    private Integer code; // 异常代码
    private String message; // 异常消息
    private Throwable throwable; // 接收真实异常对象

    /**
     * 构造函数，创建一个带有代码和消息的StgyException对象。
     *
     * @param code    异常代码
     * @param message 异常消息
     */
    public StgyException(Integer code, String message){
        this(code,message,null);
    }

    /**
     * 主要构造函数，创建一个带有代码、消息和真实异常对象的StgyException对象。
     *
     * @param code    异常代码
     * @param message 异常消息
     * @param throwable 真实异常对象
     */
    public StgyException(Integer code, String message,Throwable throwable){
        this.code = code;
        this.message = message;
        this.throwable = throwable;
    }

    /**
     * 构造函数，根据ResultCodeEnum创建一个带有代码和消息的StgyException对象。
     *
     * @param codeEnum ResultCodeEnum对象，包含异常代码和消息
     */
    public StgyException(ResultCodeEnum codeEnum){
        this(codeEnum.getCode(),codeEnum.getMessage());
    }

    /**
     * 构造函数，根据ResultCodeEnum创建一个带有代码、消息和真实异常对象的StgyException对象。
     *
     * @param codeEnum ResultCodeEnum对象，包含异常代码和消息
     * @param throwable 真实异常对象
     */
    public StgyException(ResultCodeEnum codeEnum,Throwable throwable){
        this(codeEnum.getCode(),codeEnum.getMessage(),throwable);
    }
}


